#include<bits/stdc++.h>
using namespace std;

struct node {
	int a, b;
	string get;
} a[1005];

string multiply(string a, int b) {
	vector<int> ans(a.size() + 5);
	reverse(a.begin(), a.end());

	for (int i = 0; i < a.size(); i++) {
		ans[i] = (a[i] - '0') * b;
	}

	string s;
	for (int i = 0; i < ans.size() - 1; i++) {
		s += to_string(ans[i] % 10);
		ans[i + 1] += ans[i] / 10;
	}

	int idx;
	for (idx = ans.size() - 1; ans[idx] == 0; idx--);
	string t(s, 0, idx + 1);
	reverse(t.begin(), t.end());
	return t;
}

string divide(string a, int b) {
	int t = 0;
	string ans;
	for (int i = 0; i < a.size(); i++) {
		t = t * 10 + (a[i] - '0');
		ans += to_string(t / b);
		t %= b;
	}

	int idx;
	for (idx = 0; ans[idx] == '0'; idx++);
	string s(ans, idx);
	return s;
}

bool cmp(string x, string y) {
	if (x.size() > y.size())
		return true;
	else if (x.size() < y.size())
		return false;
	// else
	for (int i = 0; i < x.size(); i++) {
		if (x[i] < y[i])
			return false;
		else
			return true;
	}
}

signed main() {
	int n;
	cin >> n;
	cin >> a[0].a >> a[0].b;
	for (int i  = 1; i <= n; i++) {
		cin >> a[i].a >> a[i].b;
	}

	sort(a + 1, a + n + 1, [](node x, node y) {
		return 1.0 * x.a / y.b < 1.0 * y.a / x.b;
	});


	string ans = "0";
	string s = to_string(a[0].a);
	for (int i = 1; i <= n; i++) {
		a[i].get = divide(s, a[i].b);
		s = multiply(s, a[i].a);
		ans = cmp(ans, a[i].get) ? ans : a[i].get;
	}

	cout << ans;
	return 0;
}
